package demo.IOinterface.Java147_157;
import java.util.ArrayList;
/**
 * ArrayList集合
 * 什么是集合呢？
 * 集合和已经学过的数组比较类似，本身也是引用数据类型，而且可以保存更多的数据
 * 区别在于数组的长度不可改变，但是集合的长度可以任意改变
 * 集合还包含着很多种：ArrayList, HashSet. LinkedList, HashMap.....十几种
 * 现在我们只学习ArrayList,简单的一种即可，其他的集合类似
 *
 * java.util.ArrayList是一个类，使用起来就有三个步骤：
 * 1.导包     import java.util.ArrayList;
 * 2.创建
 * 类名称  对象名=new  类名称（）
 * ArrayList常用的构造方法：
 * public ArrayList（）；默认的无参构造方法
 * ArrayList<泛型>   AL=new ArrayList<>（）；
 * 泛型:也就是集合当中存放的全都是统一的什么类型的数据
 * 注意：泛型只能是应用类型，不能是基本类型
 * 3.使用
 *

 * 如何使用已经创建好的集合？常用的三个方法
// * 1.添加元素
// * public boolean add（E element)向集合中添加一个元素，参数是被添加的元素，而返回值一定是true值代表成功
// *
// * 2.获取元素
// * public E get（int index）从集合当中获取一个元素，参数是元素的索引（从0开始）返回值就是获取元素对象
// *
// * 3.获取长度
// *
// * public int size（）；获取集合的长度    （元素个数 ）得到int数字。
// *

 * //注意：
 * //ArrayList直接打印对象的名称不是地址值，而是内容，格式和数组类似。
 * //简单了解原因，是因为ArrayList这个类他其中的toString方法有特殊处理（今后学习）
 */

/**
 * 集合的泛型只能是引用类型，不能是基本数据类型
 * 如果一定要储存基本数据类型，那么一定要使用基本类型对应的“包装类”（全部都在jav.long包下，8中）
 * 对应的 包装类也有8种
 * 基本类型          对应的包装类
 * byte              Byte
 * int               Integer          【特殊】
 * short             Short
 * long              Long
 * float             Float
 * double            Double
 * char              Character         【特殊】
 * boolean           Boolean
 *
 * 从jdk1.5开始，基本类型可以和对应的包装类进行自动的装箱和拆箱
 * 装箱：基本类型-》包装类
 * 拆箱：包装类-》基本类型
 */
public class  集合{
    public static void main (String[]args){
//        创建的一个集合，存放的全部都是String 字符串类型的数据
        ArrayList<String>  AL=new ArrayList<>();

//        泛型只能写引用数据类型，不能写基本数据类型    ！！！！！！
//         ArrayList<int>  AL1=new ArrayList<>();

        System.out.println(AL);//[]
        System.out.println("===============");
//         * ArrayList直接打印对象的名称不是地址值，而是内容，格式和数组类似。
//          * 简单了解原因，是因为ArrayList这个类他其中的toString方法有特殊处理（今后学习）
//        向集合当中添加元素：add
        AL.add("1");
        AL.add("12");
        AL.add("123");
        AL.add("1234");
        System.out.println(AL);//[1, 12, 123, 1234]

        boolean success=AL.add("12345");
        System.out.println("=======下面是添加元素========");

        System.out.println("添加元素是否成功："+success);//true            添加元素是否成功：true
//        对于ArrayList集合来说添加的add 动作一定是成功的，返回值必然是true
//        但是对于其他的集合来看add方法就不定成功了
//
        System.out.println(AL);//[1, 12, 123, 1234, 12345]

        System.out.println("=======下面是获取元素========");

        String name=AL.get(1);//代表要获取第一号元素     get只是获取
        System.out.println(name);//获取的第一号元素是：12        索引和数组的一样
        System.out.println(AL.get(1));

        System.out.println("=======下面是获取长度========");
        System.out.println("集合的长度："+AL.size());//5
        AL.add("迪丽热巴");
        AL.add("古力娜扎");
        AL.add("马尔扎哈");
        AL.add("赵丽颖 ");
        System.out.println("集合的长度："+AL.size());//9
        System.out.println("=======下面是遍历输出每一个字符串对象========");
//      遍历输出每一个字符串对象
//      集合的长度获取：size（）
        for(int i=0;i<AL.size();i++){
//          获取一个当前元素：get（int）     int值是从0开始的和数组一样     索引

            String name1=AL.get(i);
            System.out.println(name1);
        }
        System.out.println("=======下面是集合存储数据类型========");
        ArrayList<Integer> AL1=new ArrayList<>();
        ArrayList<Character> AL2=new ArrayList<>();
        AL1.add(100);
        AL1.add(200);
        AL2.add('a');
        int name2=AL1.get(1);
        char name3=AL2.get(2);
        System.out.println(name2);
        System.out.println(name3);
    }
}
